/**
 * JavaScript类生成器
 * @param {Object} opts 创建类的选项
 * opts.__init__ 类的构造方法
 * opts.__name__ 类的名字
 * opts其他属性和方法，对应类的其他属性和方法，所有该类的实例公用这些属性和方法
 * @param {Fuction} Parent 父类
 */
export default function () {
  var opts, Parent;
  if (typeof arguments[0] === 'function') {
    Parent = arguments[0];
    opts = arguments[1];
  } else {
    opts = arguments[0];
  }
  var _opts = Object.assign({}, opts);
  var init = _opts.__init__;
  var name = _opts.__name__ || 'MyClass';
  delete _opts.__init__;
  delete _opts.__name__;
  if (Parent) {
    var cls = eval(`(function (){
      return function ${name}() {
        Parent.apply(this, arguments);
        init && init.apply(this, arguments);
      }
    })()`);
    cls.prototype = Object.create(Parent.prototype);
    cls.prototype.constructor = cls;
    Object.assign(cls.prototype, _opts);
    return cls;
  } else {
    var cls = eval(`(function (){
      return function ${name}() {
        init && init.apply(this, arguments);
      }
    })()`);
    Object.assign(cls.prototype, _opts);
    return cls;
  }
};
